TARGET := mibo

#定义交叉编译环境变量，当需要编译arm/mips等平台应用程序/库的时候修改它
#cross compile tools defined
CROSS_COMPILE = arm-linux-
AS		= $(CROSS_COMPILE)as
LD		= $(CROSS_COMPILE)ld
CC		= $(CROSS_COMPILE)gcc
CPP		= $(CC) -E
AR		= $(CROSS_COMPILE)ar
NM		= $(CROSS_COMPILE)nm
STRIP	= $(CROSS_COMPILE)strip
RANLIB	= $(CROSS_COMPILE)ranlib

#注意每行后面不要有空格，否则会算到目录名里面，导致问题
SRC_DIR		= ./
BUILD_DIR	= tmp
OBJ_DIR		= $(BUILD_DIR)/obj
DEPS_DIR	= $(BUILD_DIR)/deps

#这里添加其他头文件路径
INC_DIR = \
	-I./mult_timer \
	-I./process \
	-I./str2argv \
	-I./../editline-1.17.1 \
	-I./../editline-1.17.1/src \

#这里添加编译参数
CC_FLAGS := $(INC_DIR) -Wall -std=gnu99
LNK_FLAGS := \
	-lpthread \
	-L./../editline-1.17.1/src/.libs -leditline

#这里递归遍历3级子目录
DIRS := $(shell find $(SRC_DIR) -maxdepth 3 \( -path ./aa -o -path ./bb \) -prune -o -type d -print)

#将每个子目录添加到搜索路径
VPATH = $(DIRS)

#查找src_dir下面包含子目录的所有cpp文件
SOURCES	= $(foreach dir, $(DIRS), $(wildcard $(dir)/*.c))
OBJS	= $(addprefix $(OBJ_DIR)/,$(patsubst %.c,%.o,$(notdir $(SOURCES))))
DEPS	= $(addprefix $(DEPS_DIR)/, $(patsubst %.c,%.d,$(notdir $(SOURCES))))

all:$(TARGET)
	@echo build $(TARGET) done.

$(TARGET):$(OBJS)
	$(CC) $^ $(LNK_FLAGS) -o $@

#编译之前要创建OBJ目录，确保目录存在
$(OBJ_DIR)/%.o:%.c
	@if [ ! -d $(OBJ_DIR) ]; then mkdir -p $(OBJ_DIR); fi;\
	$(CC) -c $(CC_FLAGS) -o $@ $<

#编译之前要创建DEPS目录，确保目录存在
#前面加@表示隐藏命令的执行打印
$(DEPS_DIR)/%.d:%.c
	@if [ ! -d $(DEPS_DIR) ]; then mkdir -p $(DEPS_DIR); fi;\
	set -e; rm -f $@;\
	$(CC) -MM $(CC_FLAGS) $< > $@.$$$$;\
	sed 's,\($*\)\.o[ :]*,$(OBJ_DIR)/\1.o $@ : ,g' < $@.$$$$ > $@;\
	rm -f $@.$$$$

#前面加-表示忽略错误
-include $(DEPS)

.PHONY : install clean

install:
	@echo "no finish."

clean:
	rm -rf $(BUILD_DIR) $(TARGET)
